热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

通信地址|都会_大数据

篇首语:本文由编程笔记#小编为大家整理,主要介绍了大数据相关的知识,希望对你有一定的参考价值。目录:一、

篇首语:本文由编程笔记#小编为大家整理,主要介绍了大 数 据相关的知识,希望对你有一定的参考价值。



目录:


  • 一、大数据介绍:
    • 1. 为什么使用大数据技术:
    • 2.大数据的定义:

  • 二.大数据应用领域:
  • 三.大数据处理框架:
  • 四.hadoop生态:
    • 1.项目定义:
    • 2.核心项目:
    • 3.相关项目:

  • 五.Hadoop核心项目Hadoop分布式文件系统(HDFS):
    • 1.hadoop文件系统定义:
    • 2.hadoop文件系统特点:
    • 3.hadoop分布式文件系统关键词:
    • 4.hdfs写数据流程:
    • 5.hdfs读数据流程:

  • 六.Hadoop核心项目编程模型(MapReduce)介绍:
    • 1.MapReduce作用:
    • 2.MapReduce工作流程:

  • 七.Hadoop部署区分依据:
    • 1.本地模式、伪分布式、完全分布式区分依据:

  • 八.单机(本地模式)部署:
    • 1.单机部署模式介绍:
    • 2.部署软件包获取:
      • 2.1 获取hadoop软件包:
      • 2.2 获取JDK软件包:
      • 2.3 部署jdk和hadoop:


  • 九.伪分布式部署:
    • 1.伪分布式部署模式介绍:
    • 2.获取软件包:
    • 3.配置文件修改:
      • 3.1 修改hadoop-env.sh、mapred-env.sh、yarn-env.sh文件中JAVA_HOME参数:
      • 3.2 修改core-site.xml:
      • 3.3 配置hdfs-site.xml:
      • 3.4 格式化hdfs:
      • 3.5 查看hdfs临时目录:

    • 4.启动角色:
      • 4.1 启动namenode:
      • 4.2 启动datanode:
      • 4.3 )验证:

    • 5.HDFS上测试创建目录、上传、下载文件:
      • 5.1 创建目录:
      • 5.2 上传文件:
      • 5.3 读取内容:
      • 5.4 下载文件到本地:

    • 6.配置yarn:
      • 6.1 Yarn介绍:
      • 6.2 使用Yarn好处:
      • 6.3 YARN 主从架构:
      • 6.4 配置mapred-site.xml:
      • 6.5 配置yarn-site.xml:
      • 6.6 启动yarn:
      • 6.7 测试:

    • 7. 停止hadoop:

  • 十.NameNode HA+完全分布式部署:
    • 1.NameNode HA切换实现方法:
    • 2.NameNode HA数据共享方法:
    • 3.环境部署:
      • 3.1 zookeeper部署:
      • 3.2 软件包获取下载配置:
      • 3.3 hadoop软件包获取下载配置:
        • 3.3.1 修改core-site.xml文件:
        • 3.3.2 修改hdfs-site.xml文件:
        • 3.3.3 配置datanode节点记录文件 slaves:
        • 3.3.4 修改mapred-site.xml文件:
        • 3.3.5 修改yarn-site.xml文件:

      • 3.4 集群启动:
        • 3.4.1 在datanode节点(3台)启动zookeeper:
        • 3.4.2 启动journalnode(在namenode上操作,例如hd1):
        • 3.4.3 格式化hdfs文件系统(在namenode上操作,例如hd1):
        • 3.4.4 格式化zk(namenode上操作,例如hd1):
        • 3.4.5 启动hdfs(namenode上操作,例如hd1):
        • 3.4.6 启动yarn(resourcemanager上操作,例如想让hd2成为resourcemanager,需要在hd2上启动。):





一、大数据介绍:

1. 为什么使用大数据技术:



  • 数据量越来越大
  • 数据分析的实时性越来越强
  • 数据结果的应用越来越广泛


2.大数据的定义:



大数据是收集、整理、处理大容量数据集,并从中获得结果的技术总称



二.大数据应用领域:

  1. 广告:
    广告投放
    广告策略
  2. 电信:
    深度包检测
    流失分析
    网络质量
  3. 金融:
    风险识别
    预测
  4. 能源生物:
    基因组分析
    地质分析
  5. 安全:
    入侵检测
    图像识别
  6. 社交游戏:
    流失分析
    社交推荐
    使用分析
  7. 电商零售:
    推荐系统
    交易分析


三.大数据处理框架:

处理框架和处理引擎负责对数据系统中的数据进行计算




虽然“引擎”和“框架”之间的区别没有什么权威的定义,但大部分时候可以将前者定义为实际负责处理数据操作的组件,后者则可定义为承担类似作用的一系列组件




  • 仅批处理框架
    用于批量处理大数据集的处理框架,可对整个数据集进行操作。
    例如:
    Apache Hadoop,一种以MapReduce作为默认处理引擎批处理框架。
  • 仅流处理框架
    用于对随时进入系统的数据进行计算,是一种“无数据边界”的操作方式。
    例如:
    Apache Storm
    Apache Samza
  • 混合处理框架
    一些大数据处理框架可同时处理批处理和流处理工作负载。
    例如:
    Apache Spark
    Apache Flink


四.hadoop生态:

1.项目定义:



  • Apache™Hadoop®项目用于可靠,可扩展的分布式计算的开源软件。
  • Apache Hadoop是一个大数据处理框架,允许使用简单的编程模型跨计算机集群分布式处理大型数据集。
  • Apache Hadoop可以从单个服务器扩展到数千台计算机
  • Apache Hadoop集群中每台计算机都提供本地计算和存储。
  • Apache Hadoop集群不是依靠硬件来提供高可用性,而是设计了用于检测和处理应用程序层的故障,从而在计
    算机集群之上提供高可用性服务。


2.核心项目:



核心项目: hdfs mapreduce yarn




  • Hadoop分布式文件系统(HDFS™):一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。
  • Hadoop YARN:作业调度和集群资源管理的框架。
  • Hadoop MapReduce:基于YARN的系统,用于并行处理大型数据集。
  • Hadoop Common:支持其他Hadoop模块的常用实用程序。
  • Hadoop Ozone: Hadoop集群所提供的对象存储。


3.相关项目:



相关项目 :ambari hbase hive spark zookeeper




Apache的其他Hadoop相关项目包括:


  • Ambari™
    • 基于Web的工具,用于配置,管理和监控Apache Hadoop集群,包括对Hadoop HDFS,Hadoop,MapReduce,Hive,HCatalog,HBase,ZooKeeper,Oozie,Pig和Sqoop的支持。
    • Ambari还提供了一个用于查看集群运行状况的仪表板,例如热图,以及可视化查看MapReduce,Pig和Hive应用程序的功能,以及以用户友好的方式诊断其性能特征的功能。
  • Avro™
    数据序列化系统。
  • Cassandra™
    可扩展的多主数据库,没有单点故障。
  • Chukwa™
    用于管理大型分布式系统的数据收集系统。
  • HBase™
    可扩展的分布式数据库,支持大型表的结构化数据存储。
  • Hive™
    一种数据仓库基础架构,提供数据汇总和即时查询。
  • Mahout™
    可扩展的机器学习和数据挖掘库。
  • Pig™
    用于并行计算的高级数据流语言和执行框架。
  • Spark™:
    用于Hadoop数据的快速通用计算引擎。Spark提供了一种简单而富有表现力的编程模型,支持广泛的应用程序,包括ETL,机器学习,流处理和图形计算。
  • Tez™
    基于Hadoop YARN构建的通用数据流编程框架,它提供了一个功能强大且灵活的引擎,可以执行任意DAG任务来处理批量和交互式用例的数据。Tez正在被Hadoop生态系统中的Hive™,Pig™和其他框架以及其他商业软件(例如ETL工具)采用,以取代Hadoop™MapReduce作为底层执行引擎。
  • ZooKeeper™
    用于分布式应用程序的高性能协调服务。


五.Hadoop核心项目Hadoop分布式文件系统(HDFS):

1.hadoop文件系统定义:



  • HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)
  • 它是一个高度容错性的系统
  • 它适合部署在廉价的机器上
  • 它能提供高吞吐量的数据访问
  • 它适合那些有着超大数据集(large data set)的应用程序
    • 超大数据集指的是:海量数据分析、机器学习等


2.hadoop文件系统特点:



  • 支持大数据文件
    非常适合上TB级别的大文件或者一堆大数据文件的存储,如果文件只有几个G甚至更小就没啥意思了。
  • 支持文件分块存储
    HDFS会将一个完整的大文件平均分块存储到不同计算节点上,它的意义在于读取文件时可以同时从多个计算节点上读取不同区块的文件,多主机读取比单主机读取效率要高得多。
  • 支持一次写入,多次读取,顺序读取(流式数据访问)
    这种模式跟传统文件不同,它不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化也只能在文件末添加内容。
  • 支持廉价硬件
    HDFS可以部署在普通PC机上,这种机制能够让给一些公司用几十台廉价的计算机就可以撑起一个大数据集群。
  • 支持硬件故障
    HDFS认为所有计算机都可能会出问题,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其它某几个主机上,如果其中一台主机失效,可以迅速找另一块副本取文件。



总结:


  • 支持大文件
  • 分块
  • 廉价设备
  • 支持硬件故障


3.hadoop分布式文件系统关键词:



  • Block
    最基本的存储单位;将文件进行分块处理,通常是128M/块,例如:256M文件会被分为2个Block
    • Hadoop 1.x版本,Block默认大小为64M;Hadoop 2.x,Block默认大小为128M。



  • Hadoop集群架构(主从架构)



  • NameNode(主节点)
    用于保存整个文件系统的目录信息、文件信息及分块信息,这是由唯一一台主机专门保存,当然这台主机如果出错,NameNode就失效了


    • 接收用户的操作请求
    • 维护文件系统的目录结构
    • 管理文件和Block之间的映射管理
    • 管理 block 和 DataNode 之间的映射
  • 在Hadoop2.*开始支持activity-standy模式,如果主NameNode失效,启动备用主机运行NameNode




  • DataNode(从节点)
    分布在廉价的计算机上,用于存储Block块文件
    • 文件被分成块存储到 DataNode 的磁盘上
    • 每个Block(块)可以设置多副本



总结:


  • block 文件块 128M/块
  • namenode 目录 文件 分块 接收用户访问 文件与block block与datanode
  • datanode 存block 副本存储


4.hdfs写数据流程:



  • 客户端向namenode发起请求
  • 客户端向dn发起建立连接请求
  • 客户端向dn存储数据


5.hdfs读数据流程:


六.Hadoop核心项目编程模型(MapReduce)介绍:

1.MapReduce作用:



通过对HDFS分布式文件系统的了解,我们已经可以把海量数据存储在集群中DataNode之上了,但这仅是Hadoop工作的第一步,那么如何从海量的数据中找到我们所需要的数据呢,这就是MapReduce要做的事情了




  • 求和:1+5+7+3+4+9+3+5+6=?



  • 一个银行有上亿储户,银行希望找到存储金额最高的金额是多少?




结论:


  • 将大的数据分析分成小块逐个分析,最后再将提取出来的数据汇总分析,最终获得我们想要的内容。
  • 通俗说MapReduce是一套从海量源数据提取、分析元素,最后返回结果集的方法。
  • 当然怎么分块分析,怎么做Reduce操作非常复杂,Hadoop已经提供了数据分析的实现,我们只需要编写简单的需求命令即可达成我们想要的数据



总结:


  • map 把大数据分成小数据,进行计算 通过洗牌的方式给reduce
  • reduce 对map的结果进行汇总


2.MapReduce工作流程:



  • MapReduce 框架的核心步骤主要分两部分:Map 和Reduce
  • 当向MapReduce 框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map 任务,然后分配到不同的节点(DataNode)上去执行,每一个Map 任务处理输入数据中的一部分,当Map 任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce 任务的输入数据。Reduce 任务的主要目标就是把前面若干个Map 的输出汇总到一起并输出



MapReduce工作流程:



七.Hadoop部署区分依据:

1.本地模式、伪分布式、完全分布式区分依据:



  • 主要的区别依据是NameNode、DataNode、ResourceManager、NodeManager等模块运行在几个JVM进程、几个机器。如下表所示:


八.单机(本地模式)部署:

1.单机部署模式介绍:



  • 单机(本地模式)是Hadoop的默认部署模式。
  • 当配置文件为空时,Hadoop完全运行在本地。
  • 不需要与其他节点交互,单机(本地模式)就不使用HDFS,也不加载任何Hadoop的守护进程。
  • 该模式主要用于开发调试MapReduce程序的应用逻辑。


2.部署软件包获取:


2.1 获取hadoop软件包:



https://hadoop.apache.org/releases.html



2.2 获取JDK软件包:


2.3 部署jdk和hadoop:



hadoop解压至opt,jdk解压至/usr/local


加载环境变量
测试hadoop可用性:


[root@localhost ~]#mkdir /home/input
[root@localhost ~]#cp /opt/hadoop/etc/hadoop/*.xml /home/input
[root@localhost ~]#hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce- examples-2.8.5.jar wordcount /home/input/ /home/output/00
[root@localhost ~]#cat /home/output/00/*
输出目录中有_SUCCESS文件说明JOB运行成功,part-r-00000是输出结果文件

九.伪分布式部署:

1.伪分布式部署模式介绍:



  • Hadoop守护进程运行在本地机器上,模拟一个小规模的的集群。
  • 该模式在单机模式之上增加了代码调试功能,允许你检查内存使用情况, HDFS输入/输出,以及其他的守护进程交互。


2.获取软件包:



同上



3.配置文件修改:



主要涉及的配置文件有:hadoop-env.sh、mapred-env.sh、yarn-env.sh、core-site.xml



3.1 修改hadoop-env.sh、mapred-env.sh、yarn-env.sh文件中JAVA_HOME参数:





3.2 修改core-site.xml:




  • 配置临时目录前,请先创建此目录,不创建也可以。
  • HDFS的NameNode数据默认都存放这个目录下,查看 *-default.xml 等默认配置文件,就可以看到很多依赖$hadoop.tmp.dir 的配置。
  • 默认的 hadoop.tmp.dir 是 /tmp/hadoop-$user.name ,此时有个问题就是NameNode会将HDFS的元数据存储在这个/tmp目录下,如果操作系统重启了,系统会清空/tmp目录下的东西,导致NameNode元数据丢失,是个非常严重的问题,所有我们应该修改这个路径。


3.3 配置hdfs-site.xml:




  • dfs.replication配置的是HDFS存储时的备份数量,因为这里是伪分布式环境只有一个节点,所以这里设置为1。


3.4 格式化hdfs:




  • hdfs namenode –format
    • 格式化是对HDFS这个分布式文件系统中的DataNode(DN)进行分块,统计所有分块后的初始元数据的存储在NameNode(NN)中。
    • 格式化后,查看core-site.xml里hadoop.tmp.dir(本例是/opt/data目录)指定的目录下是否有了dfs目录,如果有,说明格式化成功。


3.5 查看hdfs临时目录:



  • ls /opt/data/tmp/dfs/name/current
    • fsimage是NameNode元数据在内存满了后,持久化保存到的文件。
    • fsimage*.md5 是校验文件,用于校验fsimage的完整性。
    • seen_txid 是hadoop的版本
    • vession文件里保存:
      • namespaceID:NameNode的唯一ID。
      • clusterID:集群ID,NameNode和DataNode的集群ID应该一致,表明是一个集群


4.启动角色:



请把hadoop安装目录中的sbin目录中的命令添加到/etc/profile环境变量中,不然无法使用hadoop-daemon.sh



4.1 启动namenode:



  • hadoop-daemon.sh start namenode


4.2 启动datanode:



  • hadoop-daemon.sh start datanode


4.3 )验证:



  • jps命令查看是否已经启动成功,有结果就是启动成功了


5.HDFS上测试创建目录、上传、下载文件:


5.1 创建目录:



  • hdfs dfs -mkdir /test


5.2 上传文件:

[root@localhost ~]#hdfs dfs -put
$HADOOP_HOME/etc/hadoop/core-site.xml /test

5.3 读取内容:



  • hdfs dfs -cat /test/core-site.xml


5.4 下载文件到本地:



  • hdfs dfs -get /test/core-site.xml


6.配置yarn:


6.1 Yarn介绍:



  • A framework for job scheduling and cluster resource management.
    • 功能:任务调度 和 集群资源管理
  • YARN (Yet An other Resouce Negotiator) 另一种资源协调者是 Hadoop 2.0新增加的一个子项目,弥补了Hadoop 1.0(MRv1)扩展性差、可靠性资源利用率低以及无法支持其他计算框架等不足。
  • Hadoop的下一代计算框架MRv2将资源管理功能抽象成一个通用系统YARN
  • MRv1的 jobtracker和tasktrack也不复存在,计算框架 (MR, storm, spark)同时运行在之上,使得hadoop进入了多计算框架的弹性平台时代。



总结:


  • yarn是一种资源协调者
  • 从mapreduce拆分而来
  • 带来的好处:让hadoop平台性能及扩展性得到更好发挥


6.2 使用Yarn好处:



-在某些时间,有些资源计算框架的集群紧张,而另外一些集群资源空闲。 那么这框架共享使用一个则可以大提高利率些集群资源空闲。


  • 维护成本低。
  • 数据共享。 避免了集群之间移动数据。


6.3 YARN 主从架构:



  • ResourceManager 资源管理
  • NodeManager 节点管理
  • ResourceManager
    • 负责对各个NodeManager 上的资源进行统一管理和任务调度。
  • NodeManager
    • 在各个计算节点运行,用于接收RM中ApplicationsManager 的计算任务、启动/停止任务、和RM中Scheduler 汇报并协商资源、监控并汇报本节点的情况。



6.4 配置mapred-site.xml:



默认没有mapred-site.xml文件,但是有个mapred-site.xml.template配置模板文件。复制模板生成mapredsite.xml


[root@localhost ~]#cp /opt/hadoop/etc/hadoop/mapred-site.xml.template /opt/hadoop/etc/hadoop/mapred-site.xml
[root@localhost ~]#vim /opt/hadoop/etc/hadoop/mapred-site.xml

mapreduce.framework.name</name
yarn</value>
</property>


指定mapreduce运行在yarn框架上



6.5 配置yarn-site.xml&#xff1a;


yarn.nodemanager.aux-services</name>
mapreduce_shuffle</value>
</property>

yarn.resourcemanager.hostname</name>
hd1</value> #hd1是在hosts文件中定义的主机名
</property>


  • yarn.nodemanager.aux-services配置了yarn的默认混洗方式&#xff0c;选择为mapreduce的默认混洗算法
  • yarn.resourcemanager.hostname指定了Resourcemanager运行在哪个节点上


6.6 启动yarn&#xff1a;

[root&#64;localhost ~]#yarn-daemon.sh start resourcemanager
[root&#64;localhost ~]#yarn-daemon.sh start nodemanager
[root&#64;localhost ~]#jps

6.7 测试&#xff1a;



  • YARN的Web客户端端口号是8088&#xff0c;通过http://hd1:8088/可以查看。
  • 在Hadoop的share目录里&#xff0c;自带了一些jar包&#xff0c;里面带有一些mapreduce实例小例子&#xff0c;位置在share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar&#xff0c;可以运行这些例子体验刚搭建好的Hadoop平台&#xff0c;我们这里来运行最经典的WordCount实例

[root&#64;localhost ~]#hdfs dfs -mkdir -p /test/input
创建原始文件:
在本地/opt/data目录创建一个文件wc.input,内容如下:
tom jime
hadoop hive
hbase hadoop tom
将wc.input文件上传到HDFS的/test/input目录中:
[root&#64;localhost ~]#hdfs dfs -put /opt/data/wc.input /test/input
运行
[root&#64;localhost ~]#yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples- 2.8.5.jar wordcount /test/input /test/output
查看输出结果
[root&#64;localhost ~]#hdfs dfs -ls /test/output
output目录中有两个文件&#xff0c;_SUCCESS文件是空文件&#xff0c;有这个文件说明Job执行成功
part-r-00000文件是结果文件&#xff0c;其中-r-说明这个文件是Reduce阶段产生的结果&#xff0c;mapreduce程序执行时&#xff0c;可
以没有reduce阶段&#xff0c;但是肯定会有map阶段&#xff0c;如果没有reduce阶段这个地方有是-m-
一个reduce会产生一个part-r-开头的文件

7. 停止hadoop&#xff1a;

[root&#64;localhost ~]#hadoop-daemon.sh stop namenode
[root&#64;localhost ~]#hadoop-daemon.sh stop datanode
[root&#64;localhost ~]#yarn-daemon.sh stop resourcemanager
[root&#64;localhost ~]#yarn-daemon.sh stop nodemanager

十.NameNode HA&#43;完全分布式部署&#xff1a;


  • 完全分部式是真正利用多台Linux主机来进行部署Hadoop&#xff0c;对Linux机器集群进行规划&#xff0c;使得Hadoop各个模块分别 部署在不同的多台机器上


1.NameNode HA切换实现方法&#xff1a;



  • Hadoop2.X对NameNode进行一个抽象:NameService 一个NameService下面有两个NameNode&#xff0c;分别处于Active和Standby状态
  • 通过Zookeeper进行协调选举&#xff0c;确保只有一个活跃的NameNode
  • 一旦主(Active)宕掉&#xff0c;standby会切换成Active


  • 作为一个ZK集群的客户端&#xff0c;用来监控NN的状态信息。每个运行NN的节点必须要运行一个zkfc



zkfc提供以下功能&#xff1a;


  • Health monitoring
    zkfc定期对本地的NN发起health-check的命令&#xff0c;如果NN正确返回&#xff0c;那么这个NN被认为是OK的。否则被认为是失效节点
  • ZooKeeper session management
    当本地NN是健康的时候&#xff0c;zkfc将会在zk中持有一个session。如果本地NN又正好是active的&#xff0c;那么zkfc还有持有一个"ephemeral"的节点作为锁&#xff0c;一旦本地NN失效了&#xff0c;那么这个节点将会被自动删除
  • ZooKeeper-based election
    如果本地NN是健康的&#xff0c;并且zkfc发现没有其他的NN持有那个独占锁。那么他将试图去获取该锁&#xff0c;一旦成功&#xff0c;那么它就需要执行Failover&#xff0c;然后成为active的NN节点。 Failover&#xff08;故障域转移&#xff09; 的过程是&#xff1a;第一步&#xff0c;对之前的NN执行fence&#xff0c;如果需要的话。第二步&#xff0c;将本地NN转换到active状态



2.NameNode HA数据共享方法&#xff1a;



  • Namenode主要维护两个文件&#xff0c;一个是fsimage&#xff0c;一个是editlog
  • fsimage保存了最新的元数据检查点&#xff0c;包含了整个HDFS文件系统的所有目录和文件的信息。对于文件来说包括了数据块描述信息、修改时间、访问时间等&#xff1b;对于目录来说包括修改时间、访问权限控制信息(目录所属用户&#xff0c;所在组)等
  • editlog主要是在NameNode已经启动情况下对HDFS进行的各种更新操作进行记录&#xff0c;HDFS客户端执行所有的写操作都会被记录到editlog中




  • 上面在Active Namenode与StandBy Namenode之间的绿色区域就是JournalNode&#xff0c;当然数量不一定只有1个,作用相当于NFS共享文件系统&#xff0c;Active Namenode往里写editlog数据&#xff0c;StandBy再从里面读取数据进行同步
  • 两个NameNode为了数据同步&#xff0c;会通过一组称作JournalNodes的独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时&#xff0c;会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNs中的变更信息&#xff0c;并且一直监控edit log的变化&#xff0c;把变化应用于自己的命名空间。standby可以确保在集群出错时&#xff0c;命名空间状态已经完全同步了
  • 集群启动时&#xff0c;可以同时启动2个NameNode。这些NameNode只有一个是active的&#xff0c;另一个属于standby状态。active状态意味着提供服务&#xff0c;standby状态意味着处于休眠状态&#xff0c;只进行数据同步&#xff0c;时刻准备着提供服务


3.环境部署&#xff1a;




  • 六台主机进行时间同步&#xff0c;修改主机名&#xff0c;写进hosts文件中&#xff0c;关闭防火墙和selinux&#xff0c;六台主机进行免密登录
  • 六台主机部署一下jdk


3.1 zookeeper部署&#xff1a;



  • zookeeper节点要是基数台&#xff0c;具体emmm&#xff0c;百度
    据说是Zookeeper官方建议部署奇数台服务器,其实是基于节约资源的角度来考虑的&#xff0c;而且基数台的话可以保证投票选举的时候不会出现同票数这种情况



  • ZooKeeper 是为分布式应用程序提供高性能协调服务的工具集合&#xff0c;译名为“动物园管理员”
  • 分布式应用程序可以基于它实现配置维护、命名服务、分布式同步、组服务等
  • 是 Hadoop集群管理的一个必不可少的模块,它主要用来解决分布式应用中经常遇到的数据管理问题&#xff0c;如集群管理、统一命名服务、分布式配置管理、分布式消息队列、分布式锁、分布式协调等



  • 在ZooKeeper集群当中&#xff0c;集群中的服务器角色有两种LeaderLearner&#xff0c;Learner角色又分为Observer和Follower
  • Zookeeper的核心是原子广播&#xff0c;这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式&#xff0c;它们分别是恢复模式&#xff08;选主&#xff09;和广播模式&#xff08;同步&#xff09;
  • 当服务启动或者在领导者崩溃后&#xff0c;Zab就进入了恢复模式&#xff0c;当领导者被选举出来&#xff0c;且大多数Follower完成了和leader的状态同步以后&#xff0c;恢复模式就结束了。状态同步保证了leader和Follower具有相同的系统状态


  • 该ZooKeeper集群当中一共有5台服务器&#xff0c;有两种角色Leader和Follwer&#xff0c;5台服务器连通在一起&#xff0c;客户端又分别连在不同的ZK服务器上
  • 如果当数据通过客户端1&#xff0c;在左边第一台Follower服务器上做了一次数据变更&#xff0c;它会把这个数据的变化同步到其他所有的服务器&#xff0c;同步结束之后&#xff0c;那么其他的客户端都会获得这个数据的变化
  • Zookeeper是一个由多个server组成的集群&#xff0c;一个leader&#xff0c;多个follower&#xff0c;每个server保存一份数据副本&#xff0c;全局数据一致、分布式读写&#xff0c;更新请求转发&#xff0c;由leader实施



Leader主要有三个功能&#xff1a;


  1. 恢复数据
  2. 维持与Learner的心跳&#xff0c;接收Learner请求并判断Learner的请求消息类型
  3. Learner的消息类型主要有PING消息、REQUEST消息、ACK消息、REVALIDATE消息&#xff0c;根据不同的消息类型&#xff0c;进行不同的处理

Follower主要有四个功能&#xff1a;


  1. 向Leader发送请求&#xff08;PING消息、REQUEST消息、ACK消息、REVALIDATE消息&#xff09;
  2. 接收Leader消息并进行处理
  3. 接收Client的请求&#xff0c;如果为写请求&#xff0c;发送给Leader进行投票
  4. 返回Client结果


3.2 软件包获取下载配置&#xff1a;



https://downloads.apache.org/zookeeper/


[root&#64;localhost ~]#tar xf zookeeper-3.4.13.tar.gz -C /usr/local #版本用自己下载的版本
[root&#64;localhost ~]#mv /usr/local/zookeeper-3.4.13 /usr/local/zookeeper
[root&#64;localhost ~]#mv /usr/local/zookeeper/conf/zoo.sample.cfg /usr/local/zookeeper/conf/zoo.cfg
[root&#64;localhost ~]#vim /usr/local/zookeeper/conf/zoo.cfg
dataDir&#61;/opt/data
server.1&#61;hd4:2888:3888
server.2&#61;hd5:2888:3888
server.3&#61;hd6:2888:3888
[root&#64;localhost ~]#mkdir /opt/data
[root&#64;localhost ~]#echo 1 > /opt/data/myid


  • 每台服务器myid不同&#xff0c;需要分别修改&#xff0c;例如server.1对应的myid内容为1&#xff0c;server.2对应的myid内容为2&#xff0c;server.3对应的myid为3
  • 2888端口&#xff1a;follower连接到leader机器的端口
  • 3888端口&#xff1a;leader选举端口



然后添加环境变量&#xff1a;


[root&#64;localhost ~]#vim /etc/profile.d/hadoop.sh
export JAVA_HOME&#61;/usr/local/jdk
export ZOOKEEPER_HOME&#61;/usr/local/zookeeper
export PATH&#61;$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
[root&#64;localhost ~]# source /etc/profile


验证zookeeper&#xff1a;


[root&#64;localhost ~]#zkServer.sh start
[root&#64;localhost ~]#zkServer.sh status

3.3 hadoop软件包获取下载配置&#xff1a;



https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/
然后解压至opt目录下
添加环境变量&#xff1a;




  • 修改配置文件&#xff0c;在opt目录下的hadoop(自己创建的目录)下的etc目录下



hadoop-env.sh


[root&#64;localhost ~]#vim hadoop-env.sh
export JAVA_HOME&#61;/usr/local/jdk


mapred-env.sh




yarn-env.sh



3.3.1 修改core-site.xml文件&#xff1a;

<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/data/tmp</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hd4:2181,hd5:2181,hd6:2181</value>
</property>

3.3.2 修改hdfs-site.xml文件&#xff1a;

<!--指定hdfs的nameservice为ns1&#xff0c;需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value> #ns1是nn1和nn2组成的一个组
</property>
<!-- ns1下面有两个NameNode&#xff0c;分别是nn1&#xff0c;nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>hd1:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>hd1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>hd2:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>hd2:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hd4:8485;hd5:8485;hd6:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/data/journal</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</valu e>
</property>
<!-- 配置隔离机制 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>

3.3.3 配置datanode节点记录文件 slaves:

[root&#64;localhost ~]#vim slaves
hd4
hd5
hd6

3.3.4 修改mapred-site.xml文件&#xff1a;

[root&#64;localhost ~]#cp /opt/hadoop285/etc/hadoop/mapred-site.xml.template /opt/hadoop285/etc/hadoop/mapred-site.xml
[root&#64;localhost ~]#vim mapred-site.xml
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

3.3.5 修改yarn-site.xml文件&#xff1a;

[root&#64;localhost ~]#vim yarn-site.xml
<!-- 指定resourcemanager地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hd3</value>
</property

推荐阅读
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有